/**
 * ----------------------------------------------------
 * Javascript Client JQuery Static Class
 * ----------------------------------------------------
 * @author PoLuX
 */
jQuery(function($){
        /**
         * Extension of JQuery library
         */
        jQuery.extend({
        	/**
        	 * Monitoring instanced object
        	 */
        	Monitoring: ( function()
            { 
        		var	 tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>";
        		var	 tabCounter = 2;
        		
        		/**
        		 * Refresh Culture combobox
        		 *
        		 * @see callback
        		 * @param string data	Donn�es renvoy�es
        		 */
        		function _cb_refreshSelectCulture(data, textStatus, jqXHR)
        		{
        			// Gestion du type de message
        			if(data.code == "OK")
        			{
        				$("#slctCulture option").remove();
        				$('#slctCulture').append('<option value="0" selected="selected">Please choose a culture</option>');
        				for (var i=0; i<data.data.length; i++) {
        					$('#slctCulture').append(new Option(data.data[i]['CULT_LIB']+" - "+data.data[i]['TECHCULT_CODE'],data.data[i]['CULT_CODE'],false,false)); //;'<option value="'+data.data[i]['CULT_CODE']+'">'+data.data[i]['CULT_LIB']+" - "+data.data[i]['TECHCULT_CODE']+'</option>');
        				}       
        				
        				// TODEV -> bind event on all options to refresh main Tab
        			}
        			else
        				alert(msgs);
        		}
        		/**
        		 * Refresh Culture combobox
        		 *
        		 * @see callback
        		 * @param string data	Donn�es renvoy�es
        		 */
        		function _cb_refreshSensorsValues(data, textStatus, jqXHR)
        		{
        			// Gestion du type de message
        			if(data.code == "OK")
        			{
        				$("#txtEnvTemperature").val(data.data['AR_TEMPEDC']+" \xB0C");
        				$("#txtEnvPressure").val(data.data['AR_PRESSION']+" hPa");
        				$("#txtEnvHumidity").val(data.data['AR_HUMIDITY']+" %");
        				$("#txtEnvLuminosity").val(data.data['AR_LUMINOSITY']+" lums");
//        				       
        				
        				// TODEV -> bind event on all options to refresh main Tab
        			}
        			else
        				alert(msgs);
        		}
        		/**
        		 * Affichage du formulaire de création d'un module
        		 *
        		 * @see callback
        		 * @param string data	Donn�es renvoy�es
        		 */
        		function _cb_newModule(data)
        		{
        			if(data.msg != "")
        			{
        				alert(data.msg);        				
        			}
        			return data.content;
        		}        
        		/**
        		 * Affichage du formulaire de cr�ation d'un module
        		 *
        		 * @see callback
        		 * @param string data	Donn�es renvoy�es
        		 */
        		function _cb_callEnableDisable(data)
        		{
        			if(data.msg != "")
        			{
        				alert(data.msg);        				
        			}
        			return data.content;
        		}        
        		/**
        		 * CallBack Affichage formulaire de cr�ation de module
        		 */
        		function _cb_displayNewModule(data)
        		{       
        			// on bind la validation sur le formulaire
        			$("#createModuleFrm").validate({
        				submitHandler: function(form) {
        					$.Administration.createModule();
        			   },
        			   errorClass : "ui-state-error",
        			   validClass : "ui-state-highlight",
        			   focusInvalid: true,
        			   errorLabelContainer : "#errorValidatorContainer",
        			   wrapper: "li",
        			   rules: {
        				   txtNomModule :{
        				   		required : true,
        				   		minlength: 4
        				   }	    				   
       				   },
       				   invalidHandler: function(form, validator) {
       				      var errors = validator.numberOfInvalids();
       				      if (errors) {
       				        $("#errorValidatorContainer").show();
       				      } else {
       				        $("#errorValidatorContainer").hide();
       				      }
       				    },

       				   debug:true

        			});   
        			
        			// on bind la gestion du module priv�e
        			$("#chkModPrivee").bind("click",function(){  $.Administration.manageModPrivate(this,$("#txtNomModule")); });
        			return data;
        		}
        		/**
        		 * Callback après chargement des données
        		 * 
        		 * Initialisation des comportements de l'interface
        		 */
        		function _cb_loadedDetailDb(data)
        		{
        			//$("#detailsDBAccord").accordion();
        		}
        		/**
                 * M�thodes publiques
                 */
                return {
                    
					/**
                     * Envoi une requete permettant de récupéré les informations
                     * sur le déplacement pour initilisé le formulaire de modification
                     *
                     * @param int idDep identifiant du déplacement
                     */
                    envoie: function ()
                    {
                        $.chargementTableau($('#RCA_champsRechercheResultat_table'));
                        
                        var dataToSend = {
                            matAgt: $('#RCA_rechercheSuppleant_mat').val(),
                            nomAgt: $('#RCA_rechercheSuppleant_nom').val(),
                            preAgt: $('#RCA_rechercheSuppleant_prenom').val(),
                            idEnt: $('#RCA_rechercheSuppleant_entite').val()
                        };
                        
                        $.post("801/scripts/s-jquery801a01.php",
                               dataToSend,
                               _retourRecherche,
                               "json"
                        ); 
                    },
                    /**
                     * Appel d'une fonctionnalit�
                     */
                    loadFunctionnality : function (moduleName,functionName)
                    {
                    	var dataToSend = {
                    			mod : moduleName,
                    			func : functionName,
                    			ajax: "1"
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,null,null,"html");
                   
                    },
                    resfreshListingMod : function (moduleName,functionName)
                    {
                    	// R�cup�ration de filtre
                    	var privateModule = $("#chkPrivateMod").attr('checked');
                    	
                    	var dataToSend = {
                    			mod : moduleName,
                    			func : functionName,
                    			ajax: "1",
                    			priv : privateModule
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,null,null,"html");
                   
                    },
                    /**
                     * Deploie la partie detail pour un module
                     */
                    updateDetailsModule : function(moduleName,functionName,idTr,elem)
                    {
                    	// L'on r�cup�re le statut (plier ou d�plier)
                    	// et l'on adapte la class CSS
                    	if($(elem).hasClass("ui-icon-plusthick"))
                    	{
                    		// Mode d�plier
                    		$(elem).removeClass("ui-icon-plusthick");
                    		$(elem).addClass("ui-icon-minusthick");  
                    		
                    		// R�cup�ration TR et Table pour ajout ligne
                        	var modTr = $('#'+idTr);
                        	var newTR = $('<tr>')
                        					.attr('id',idTr+'_details')
                        					.html('<td colSpan=5>Chargement<td>');
                        	
                        	//Ajout du TR au tableau 
                        	$(modTr).after(newTR);
                        	
                        	var dataToSend = {
                            		mod : moduleName,
                            		func : functionName,
                            		ajax: "1",
                            		id : idTr
                            };
                        	
                        	$(newTR).load("index.php",dataToSend,null,null,"html");                    		
                    	}
                    	else
                    	{
                    		// Mode Plier
                    		$(elem).removeClass("ui-icon-minusthick");
                    		$(elem).addClass("ui-icon-plusthick");
                    		
                    		// Supression du TR
                    		var modTr = $('#'+idTr).next();
                    		
                    		$(modTr).remove();
                    	}
                    	
                    },
                    /**
                     * D�sactive le module
                     */
                    disableMod : function(moduleName,functionName,modeToDisable)
                    {
                    	var privateModule = $("#chkPrivateMod").is(':checked');
                    	var dataToSend = {
                    			mod : moduleName,
                    			func : functionName,
                    			nMod : modeToDisable,
                    			ajax: "1",
                    			priv : privateModule
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,_cb_callEnableDisable,null,"json");
                    },
                    enableMod : function(moduleName,functionName,modeToEnable)
                    {
                    	var privateModule = $("#chkPrivateMod").is(':checked');
                    	var dataToSend = {
                    			mod : moduleName,
                    			func : functionName,
                    			nMod : modeToEnable,
                    			ajax: "1",
                    			priv : privateModule
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,_cb_callEnableDisable,null,"json");
                    },
                    /**
                     * Refresh Select List of Culture
                     */
                    refreshSelectCulture : function()
                    {
                    	var serviceName = "lstCulture";
                    	var formatValue = "json";
                    	
                    	var dataToSend = {
                    			service : serviceName,
                    			format : formatValue 
                        };
                    	
                    	$.post("index.php", dataToSend,_cb_refreshSelectCulture, "json" );
                    	
                    	serviceName = "lastArduinoReport";
                    	formatValue = "json";
                    	
                    	dataToSend = {
                    			service : serviceName,
                    			format : formatValue 
                        };
                    	
                    	$.post("index.php", dataToSend,_cb_refreshSensorsValues, "json" );
                    	
                    	
                    }
                    
                    ,
                    /**
                     * Cr�ation du module
                     */
                    createModule : function()
                    {
                    	var moduleName = $("#hidModuleName").val();
                    	var functionName = $("#hidFunctionName").val();
                    	var txtNomModule = $("#txtNomModule").val();
                    	var chkModPrivee = $("#chkModPrivee").is(":checked");
                    	var chkFicCSS = $("#chkFicCSS").is(":checked");
                    	var chkFicJS = $("#chkFicJS").is(":checked");
                    	var chkFicHTML = $("#chkFicHTML").is(":checked");
                    	var chkFicPHP = $("#chkFicPHP").is(":checked");
                    	
                    	var dataToSend = {
                    			mod : moduleName,
                    			func : functionName,
                    			ajax : "1",
                    			nMod : txtNomModule,
                    			cPriv : chkModPrivee,
                    			cCss : chkFicCSS,
                    			cJs : chkFicJS,
                    			cHTML : chkFicHTML,
                    			cPHP : chkFicPHP 
                        };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,_cb_newModule,null,"json");
                    },
                    /**
                     * Affichage du formulaire du nouveau Module
                     */
                    displayNewModule : function(moduleName,functionName)
                    {
                    	// R�cup�ration de filtre
                    	var dataToSend = {
                    			mod : moduleName,
                    			func : functionName,
                    			ajax: "1"                    			
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,null,_cb_displayNewModule,"html");
                    },
                    /**
                     * Management du libell� priv�e
                     */
                    manageModPrivate : function(p_o_elem,p_o_txtelem)
                    {
                    	var l_s_str = $(p_o_txtelem).val();
                    	
                    	if($(p_o_elem).is(":checked"))
                    	{
                    		 if(l_s_str[0] != "_")
                    			 $(p_o_txtelem).val("_"+l_s_str);
                    	}
                    	else
                    	{
                    		 if(l_s_str[0] == "_")
                    			 $(p_o_txtelem).val(l_s_str.replace("_",""));
                    	}
                    },
                    /**
                     * Initialize User Interface objects
                     */
                    initUI: function()
                    {
                    	//alert("Init UI - Starting");
                    	// $( "#olSensors" ).selectable();
                    	
                    	 $("#menu").menu({
                    		 select: function(event,ui){
                    			 $.Monitoring.addTab("test","test");
                    			 
                    		 }
                    	 }); 
                    	 
                    	 
                    	 $.Monitoring.initMonitoringTabs();
                    	 $("#divRefreshList").bind("click",function (event){$.Monitoring.refreshSelectCulture();}); 
                    },
                    
                    initMonitoringTabs:function()
                    {
                    	 $("#divMonitoringTabs").tabs({ collapsible: false });
                    	 $("#divMonitoringTabs").tabs( "option", "heightStyle", "auto");
                    	 
                    	 // close icon: removing the tab on click
                    	 $("#divMonitoringTabs").delegate( 
                    			 "span.ui-icon-close", 
                    			 "click", 
                    			 function() {
                    				 var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" );
                    				 $( "#" + panelId ).remove();
                    				 $("#divMonitoringTabs").tabs( "refresh" );
                    			 });
                    	 
                    	 $("#divMonitoringTabs").bind( 
                    			 "keyup", 
                    			 function( event ) {
                    				 if ( event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE ) {
                    					 var panelId = $("#divMonitoringTabs").find( ".ui-tabs-active" ).remove().attr( "aria-controls" );
                    					 $( "#" + panelId ).remove();
                    					 $("#divMonitoringTabs").tabs( "refresh" );
                    				 }
                    			 });
                    	 
                    	 $.Monitoring.addTab("Main","Salut initialization dynamique !!!");
                    	 $("#divMonitoringTabs").tabs( "refresh" );
                    	 
                    	 
                    },
                    
                    addTab:function(p_s_newTabName,p_s_content){
                    	
                    	
                    	
//                    	 var tabs = $( "#tabs" ).tabs();
//                    	 // modal dialog init: custom buttons and a "close" callback reseting the form inside
//                    	
//                    	
//                    	 // actual addTab function: adds new tab using the input from the form above
//                    	 function addTab() {
                    	 var label = p_s_newTabName || "Tab " + tabCounter,
                    	 id = "tabs-" + tabCounter,
                    	 li = $( tabTemplate.replace( /#\{href\}/g, "#" + id ).replace( /#\{label\}/g, label ) ),
                    	 tabContentHtml = p_s_content || "Tab " + tabCounter + " content.";
                    	 $("#divMonitoringTabs").find( ".ui-tabs-nav" ).append( li );
                    	 $("#divMonitoringTabs").append( "<div id='" + id + "'><p>" + tabContentHtml + "</p></div>" );
                    	 $("#divMonitoringTabs").tabs( "refresh" );
                    	 tabCounter++;
                    	 
//                    	 // addTab button: just opens the dialog
//                    	 $( "#add_tab" )
//                    	 .button()
//                    	 .click(function() {
//                    	 dialog.dialog( "open" );
//                    	 });
//                    	 // close icon: removing the tab on click
//                    	 tabs.delegate( "span.ui-icon-close", "click", function() {
//                    	 var panelId = $( this ).closest( "li" ).remove().attr( "aria-controls" );
//                    	 $( "#" + panelId ).remove();
//                    	 tabs.tabs( "refresh" );
//                    	 });
//                    	 tabs.bind( "keyup", function( event ) {
//                    	 if ( event.altKey && event.keyCode === $.ui.keyCode.BACKSPACE ) {
//                    	 var panelId = tabs.find( ".ui-tabs-active" ).remove().attr( "aria-controls" );
//                    	 $( "#" + panelId ).remove();
//                    	 tabs.tabs( "refresh" );
//                    	 }
//                    	 });
//                    	 });
                    },
                    
                    /**
                     *  Interface base de données 
                     **/
                    /**
                     * Chargement initial
                     * 
                     * @param string moduleName		Nom du module à appeler
                     * @param string functionName	Nom de la fonctionnalité à appeler
                     * @param string dbName			Nom de l'identifiant de la base de données
                     */
                    loadSelectDB : function(moduleName,functionName)
                    {
                    	var dataToSend = {
                    			mod 	: moduleName,
                    			func 	: functionName,
                    			ajax	: "1"                    			
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,null,_cb_loadedDetailDb,"html");
                    },
                    /**
                     * Chargement du détails des informations sur une base de données
                     * 
                     * @param string moduleName		Nom du module à appeler
                     * @param string functionName	Nom de la fonctionnalité à appeler
                     * @param string dbName			Nom de l'identifiant de la base de données
                     */
                    loadDetailsDB : function(moduleName,functionName,dbName)
                    {
                    	var dataToSend = {
                    			mod 	: moduleName,
                    			func 	: functionName,
                    			db		: dbName,
                    			ajax	: "1"                    			
                            };
                    	
                    	$("#pAdministrationContent").load("index.php",dataToSend,null,_cb_loadedDetailDb,"html");
                    },
                    /**
                     * Chargement de la liste des tables
                     * 
                     * @param string moduleName		Nom du module à appeler
                     * @param string functionName	Nom de la fonctionnalité à appeler
                     * @param string dbName			Nom de l'identifiant de la base de données
                     * @param string tableName		Nom de la table à afficher
                     */
                    loadLstTable : function(moduleName,functionName,dbName)
                    {
                    	var dataToSend = {
                    			mod 	: moduleName,
                    			func 	: functionName,
                    			db		: dbName,
                    			ajax	: "1"                    			
                            };
                    	
                    	$("#divDbContent").load("index.php",dataToSend,null,null,"html");
                    },
                    /**
                     * Chargement du detail d'une table
                     * 
                     * @param string moduleName		Nom du module à appeler
                     * @param string functionName	Nom de la fonctionnalité à appeler
                     * @param string dbName			Nom de l'identifiant de la base de données
                     * @param string tableName		Table à afficher
                     */
                    loadDetailTable : function(moduleName,functionName,dbName,tableName)
                    {
                    	var dataToSend = {
                    			mod 	: moduleName,
                    			func 	: functionName,
                    			db		: dbName,
                    			table	: tableName,
                    			ajax	: "1"                    			
                            };
                    	
                    	$("#divDbContent").load("index.php",dataToSend,null,null,"html");
                    },	
                    /**
                     * Chargement du formulaire pour la génération d'une classe PHP
                     * 
                     * @param string moduleName		Nom du module à appeler
                     * @param string functionName	Nom de la fonctionnalité à appeler
                     * @param string dbName			Nom de l'identifiant de la base de données
                     * @param string tableName		Table à afficher
                     */
                    loadFormGeneratePHPClass : function(moduleName,functionName,dbName,tableName)
                    {
                    	var dataToSend = {
                    			mod 	: moduleName,
                    			func 	: functionName,
                    			db		: dbName,
                    			table	: tableName,
                    			ajax	: "1"                    			
                            };
                    	
                    	$("#divDbContent").load("index.php",dataToSend,null,null,"html");
                    }	
                    ,
                    genererClassePHP : function(moduleName,functionName,dbName)
                    {
                    	var dataToSend = {
                    			mod 	: moduleName,
                    			func 	: functionName,
                    			db		: dbName,
                    			table	: $("#txtNomTable").val(),
                    			classPHP: $("#txtNomClasse").val(),
                    			ajax	: "1"                    			
                            };
                    	
                    	$("#divDbContent").load("index.php",dataToSend,null,null,"text");
                    }	
                    
                }
            })()
        });
        
        /**
         * Starting Client object
         */
        $.Monitoring.initUI();
});